package com.study.kt._03coroutines

import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

/**
 *协程挂起：协程从当前线程挂起(不是暂停，相当于该协程从线程找那个分离了)
 *  1.协程挂起后线程继续执行任务、回收资源、再利用等，例如主线程中可以继续更新UI
 *  2.协程被挂起后继续执行，如果其任务执行完毕后自动回到原先的线程(resume)
 *  3.suspend关键字并没有挂起、恢复线程的作用，他的作用是：提醒(声明、标记)，即需要在协程中调用它
 *      可以让主线程不卡
 *
 * 1.挂起函数可以像普通函数一样运行在协程中，也可以使用其他挂起函数
 * 2.挂起函数只能运行在协程或者其他挂起函数中
 */

/**
 * 全局协程类似于守护线程
 * 使用GlobalScope启动的活动协程并不会保持进程的生命
 * 主线程执行完毕，即使后台有协程程序也会停止
 */
fun main() {
    runBlocking {
        test()
    }

    GlobalScope.launch {
        repeat(10) {
            delay(1000)
            println("$it run....")
        }
    }

    Thread.sleep(3000)
    println("main")
}

suspend fun test() {
    delay(1000)
    println("suspend test")
}